跳到主要内容

sqlite 的事务

可以注意到连接 sqlite 的 db 文件时,除了主数据库文件外,还可能生成两种特殊的文件,具有 .db-shm.db-wal 后缀。这两种文件与SQLite的写前日志(Write-Ahead Logging,简称WAL)模式有关。

WAL 是 SQLite 的一种事务日志模式,旨在提高并发写入的性能并减少写入操作对读取操作的阻塞。当数据库设置为WAL模式时,所有的写入操作先被记录到一个“预写日志”文件中,而不是直接写入主数据库文件。这样做的好处是可以同时允许其他读取操作从数据库文件中读取数据,因为读取操作访问的是数据库文件的一致快照,而不受当前写入事务的影响。

  • .db-wal 文件包含了所有待合并到主数据库的变更。
  • .db-shm 文件是一个共享内存文件,用于支持并发访问和同步。

WAL 模式使得 SQLite 能够更好地处理高并发情况,提高了数据库的性能和可靠性。不过,WAL 模式下,定期执行checkpoint操作是必要的,以确保.db-wal 文件中的数据能够及时合并到主数据库文件中,同时也控制WAL 文件的大小。

.db-wal 文件

.db-wal 文件是 WAL 模式下的日志文件,其中记录了所有待写入主数据库文件的变更。当事务提交时,这些变更最终会被合并(checkpoint操作)到主数据库文件中。在这之前,数据库的状态可以通过结合主数据库文件和WAL文件来重建。

.db-shm 文件

.db-shm 文件是共享内存文件,用于在WAL模式下支持数据库的并发访问。这个文件充当了一个索引,记录了WAL文件中的变更如何映射到数据库文件的页。它也用于处理读取和写入操作之间的同步,确保数据的一致性和完整性。